package demotest;
class quenode
{
    //元素的值
    public  int val;
    public quenode prev;
    public quenode next;

    public quenode(int val)
    {
        this.val = val;
    }

}


public class Quque implements que{


    //队头
    public quenode first;
    //队尾
    public quenode last;

    @Override
    public Boolean isEmpty()
    {
        if(last != null)
        {
            return false;
        }
        return  true;
    }

    @Override
    //入队① 队尾入队
    public void rearinputque(int val)
    {
        quenode node = new quenode(val);
        if( first == null )
        {
           first = node;
            last  = first;
        }
        else {

            last.next = node;
            last = last.next;
        }
    }
    @Override
    //入队② 队头入队
    public void frontinputque(int val)
    {
        quenode node = new quenode(val);
        if(first == null)
        {
            first = node;
            last = first;
        }
        else {
            first.prev  = node;
            node.next = first;
            first = first.prev;
        }

    }



    @Override
    //出队①（单向队列）
    public void frontoutputque()
    {
        //改变链表的头结点就行
        //1、先判断队列是否为空
        if(isEmpty())
        {
            //队列为空，无法删除
            System.out.printf("队列为空！");
        }
        else {
          first = first.next;
        }
    }
    //遍历队列
    @Override
    public void print() {
        if(first == null)
        {
            return;
        }
        else {
            quenode que = first;
            while (que!=null)
            {
                System.out.printf(String.valueOf(que.val)+" ");
                que = que.next;
            }
        }
    }
    @Override
    //出队② (双向队列) 队尾出队
    public void rearoutputque()
    {
        //改变链表的头结点就行
        //1、先判断队列是否为空
        if(first == null)
        {
            //队列为空，无法删除
            System.out.printf("队列为空！");
        }
        else {
            last = last.prev;
            last.next = null;
        }
    }
  public static void main(String[] args) {
        Quque que = new Quque();

        quenode q1 = new quenode(5);
        quenode q2 = new quenode(4);
        quenode q3 = new quenode(3);
        quenode q4 = new quenode(2);
        quenode q5 = new quenode(1);

        que.frontinputque(q1.val);
        que.frontinputque(q2.val);
        que.frontinputque(q3.val);
        que.frontinputque(q4.val);
        que.frontinputque(q5.val);

       que.rearoutputque();
        que.frontoutputque();
        que.print();
    }
}
